#ifndef ITASK_H_
#define ITASK_H_

namespace Tasks{

//! ITask
/*!
	Predstavuje abstraktnu triedu ulohy.
	Definuje nutnost pretazenia operatora ().
	!POZOR!
	Nato aby nejaka uloha dediaca od ITask mohla byt
	vykonavana je potrebne zaistit threadovu bezpecnost.
	Tuto bezpecnost nijak nezaistuje samotna trieda ITask, 
	je ulohou implementatora konkretnej ulohy aby takuto
	bezpecnost zaistil!
*/
template<typename T> class ITask
{
	public:

		//! Load (public )
		/*!
			Funkcia nahra data ktore potom spracuje samotna uloha
			\param T thedata data na spracovanie.
			\return void
		*/
		void Load(T thedata)
		{
			myData = thedata;
		}

		//! operator() (pure virtual)
		/*!
			Implementaciou operatora () vytvarame navrhov
			vzor functor
			\return void
		*/
		virtual void operator()() = 0;

	protected:
		T myData;
};

}//end of Tasks namespace

#endif//ITASK_H_